package cn.xiaoxiong.shop.util;

import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.json.JSONUtil;

import java.util.Map;
import java.util.TreeMap;


public class SignUtil {

    //生成签名
    public static String createSign(Map<String,String> params,String appSecret){
        //1. sign参数不参与签名
        params.remove("sign");

        //2.把参数字典排序 a 在 b的前面
        TreeMap<String,String> treeMap = new TreeMap<>(params);

        StringBuilder builder = new StringBuilder();
        treeMap.forEach((name,val)->{
            builder.append(name).append("=").append(val).append("&");
        });
        //最后加入&appSecret=分配的密钥
        builder.append("&appSecret="+appSecret);

        //3. md5 得到签名
        return DigestUtil.md5Hex(builder.toString());
    }

    //验证签名
    //把接收到的请求参数， 去掉sign后， 重新计算生成新签名值， 和请求中的sign比较， 如果一致，签名正确
    public static boolean checkSign(Map<String,String> params , String appSecret, String sign){
        //接收的参数，重新计算得到签名
        String newSign = createSign(params, appSecret);
        return newSign.equals(sign);
    }


    public static Map<String,String> jsonToMap(String json){
        return JSONUtil.toBean(json,Map.class);
    }
}
